package cn.seaboot.admin.logger.manager;

import cn.seaboot.admin.logger.bean.LogLevel;
import cn.seaboot.admin.logger.bean.LogType;
import cn.seaboot.commons.lang.Null;

import java.lang.annotation.*;

/**
 * 操作日志
 * <p>
 * 这个类放在 Controller 和 Service，行为是不一样的，
 * <p>
 * Controller 可以记录请求响应相关的内容；
 * Service 则会记录方法名相关的内容。
 *
 * @author Mr.css on 2018/5/11.
 */
@Documented
@Target(value = ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ActionLogger {

    /**
     * 日志模版
     */
    String value() default Null.STRING;

    /**
     * 日志类型
     */
    int type() default LogType.SYSTEM;

    /**
     * 日志等级
     */
    LogLevel level() default LogLevel.INFO;

    /**
     * 操作模版，将请求参数渲染成便于理解的文字描述
     */
    String operation() default Null.STRING;

    /**
     * 避免浪费不必要的存储，允许去除一些不必要的参数记录
     */
    String[] exclusive() default {};

    /**
     * 仅记录选中的参数，为空则记录全部
     */
    String[] include() default {};
}
